home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / ISSUE23 / SYSTEM / HISTORY.PAS < prev   
Pascal/Delphi Source File  |  1997-06-04  |  3KB  |  121 lines

  1. unit History;
  2.  
  3. interface
  4.  
  5. uses SysUtils, Classes, WinProcs, IniFiles;
  6.  
  7. function  GetHistoryList (const ListName: String): TStringList;
  8. procedure AddHistoryString (const ListName, Str: String);
  9.  
  10. implementation
  11.  
  12. uses Delimit;
  13.  
  14. const
  15.     MaxStrings = 10;
  16.  
  17. var
  18.     HLists: TStringList;
  19.  
  20. function GetHistoryList (const ListName: String): TStringList;
  21. var
  22.     Idx: Integer;
  23. begin
  24.     Idx := HLists.IndexOf (ListName);
  25.     if Idx = -1 then Idx := HLists.AddObject (ListName, TStringList.Create);
  26.     Result := TStringList (HLists.Objects [Idx]);
  27. end;
  28.  
  29. procedure AddHistoryString (const ListName, Str: String);
  30. var
  31.     Idx: Integer;
  32.     List: TStringList;
  33. begin
  34.     List := GetHistoryList (ListName);
  35.     Idx := List.IndexOf (Str);
  36.     if Idx <> -1 then List.Delete (Idx) else
  37.         if List.Count = MaxStrings then List.Delete (MaxStrings - 1);
  38.  
  39.     List.Insert (0, Str);
  40. end;
  41.  
  42. procedure HistoryShutdown; far;
  43. var
  44.     Str: String;
  45.     List: TStringList;
  46.     IniFile: TIniFile;
  47.     Idx, Num: Integer;
  48. begin
  49.     IniFile := TIniFile.Create (ChangeFileExt (ParamStr (0), '.INI'));
  50.     try
  51.         IniFile.EraseSection ('History');
  52.         for Idx := 0 to HLists.Count - 1 do begin
  53.             List := TStringList (HLists.Objects [Idx]);
  54.             if List.Count > 0 then begin
  55.                 Str := '';
  56.                 for Num := 0 to List.Count - 1 do begin
  57.                     Str := Str + List.Strings [Num];
  58.                     if Num < List.Count - 1 then Str := Str + ',';
  59.                 end;
  60.                 IniFile.WriteString ('History', HLists.Strings [Idx], Str);
  61.             end;
  62.             List.Free;
  63.         end;
  64.         HLists.Free;
  65.     finally
  66.         IniFile.Free;
  67.     end;
  68. end;
  69.  
  70. procedure HistoryStartup;
  71. var
  72.     Idx: Integer;
  73.     IniFile: TIniFile;
  74.     NamesList: TStringList;
  75.  
  76.     procedure AddList (const ListName: String);
  77.     var
  78.         Idx: Integer;
  79.         NewList: TStringList;
  80.         ds: TDelimitedString;
  81.     begin
  82.         ds := TDelimitedString.CreateAssign (IniFile.ReadString ('History', ListName, ''));
  83.         try
  84.             if ds.FieldCount > 0 then begin
  85.                 NewList := TStringList.Create;
  86.                 for Idx := 0 to ds.FieldCount - 1 do
  87.                     NewList.Add (ds [Idx]);
  88.                 HLists.AddObject (ListName, NewList);
  89.             end;
  90.         finally
  91.             ds.Free;
  92.         end;
  93.     end;
  94.  
  95. begin
  96.     HLists := TStringList.Create;
  97.     IniFile := TIniFile.Create (ChangeFileExt (ParamStr (0), '.INI'));
  98.     try
  99.         NamesList := TStringList.Create;
  100.         try
  101.             IniFile.ReadSection ('History', NamesList);
  102.             for Idx := 0 to NamesList.Count - 1 do
  103.                 AddList (NamesList.Strings [Idx]);
  104.         finally
  105.             NamesList.Free;
  106.         end;
  107.     finally
  108.         IniFile.Free;
  109.     end;
  110. end;
  111.  
  112. initialization
  113.     HistoryStartup;
  114.    {$IFDEF WIN32}
  115. finalization
  116.     HistoryShutdown;
  117.     {$ELSE}
  118.     AddExitProc (HistoryShutdown);
  119.     {$ENDIF}
  120. end.
  121.